# Snakefile

rule all:
    input:
        "results/samples.h5",
        "analysis/correlator.npy",
        "analysis/beta.npy",
        "results/composite.h5",
        "results/rg_flow.npy",
        "results/anomalies.npy"

rule fit_fractal:
    input:
        "data/D_values.csv"
    output:
        "data/fractal_fit.pkl"
    script:
        "scripts/fit_fractal.py"

rule calibrate_pivot:
    input:
        "data/fractal_fit.pkl"
    output:
        "data/pivot_params.json"
    shell:
        "python scripts/calibrate_pivot.py {input} {output}"

rule build_kernel:
    input:
        n="data/D_values.csv",
        pivot="data/pivot_params.json"
    output:
        "data/kernel.npy"
    shell:
        "python scripts/build_kernel.py --n-values {input.n} --pivot-params {input.pivot} --out {output}"

rule discrete_action:
    input:
        kernel="data/kernel.npy",
        pivot="data/pivot_params.json",
        nvals="data/D_values.csv"
    output:
        "data/discrete_action.pkl"
    shell:
        "python scripts/compute_action.py --kernel {input.kernel} --pivot-params {input.pivot} --n-values {input.nvals} --out {output}"

rule path_integral:
    input:
        action="data/discrete_action.pkl",
        pivot="data/pivot_params.json"
    output:
        "results/samples.h5"
    shell:
        "python scripts/run_path_integral.py --sweep 50000 --output {output} --pivot-params {input.pivot}"

rule analyze:
    input:
        samples="results/samples.h5"
    output:
        correlator="analysis/correlator.npy",
        beta="analysis/beta.npy"
    shell:
        "python scripts/analyze_observables.py --input {input.samples} --out-corr {output.correlator} --out-beta {output.beta}"

rule anomaly_test:
    input:
        samples="results/samples.h5"
    output:
        "results/anomalies.npy"
    script:
        "scripts/compute_anomalies.py"

rule composite_moment:
    input:
        samples="results/samples.h5",
        pivot="data/pivot_params.json"
    output:
        "results/composite.h5"
    script:
        "scripts/apply_composite_moment.py"

rule rg_flow:
    input:
        action="data/discrete_action.pkl"
    output:
        "results/rg_flow.npy"
    script:
        "scripts/run_rg_flow.py"
